'use strict';
const fs = require('fs')
const path = require('path')
const FormData = require('form-data');
/**
 * 此处建议只改下订单状态，保证能及时返回给第三方支付服务器成功状态
 * 且where条件可以增加判断服务器推送过来的金额和订单表中订单需支付金额是否一致
 * 将消息发送、返佣、业绩结算等业务逻辑异步处理(写入异步任务队列表)
 * 如开启定时器每隔5秒触发一次，处理订单
 */
module.exports = async (obj, originalParam) => {
	let user_order_success = true;
	let { data = {}, verifyResult } = obj;
	let { db, _ } = originalParam;
	let {
		out_trade_no,
		total_fee
	} = data;
	// 此处写你自己的支付成功逻辑开始-----------------------------------------------------------
	// 有三种方式
	// 方式一：直接写数据库操作（原生数据库语句）
	// 方式二：使用 await uniCloud.callFunction 调用其他云函数
	// 方式三：使用 await uniCloud.httpclient.request 调用http接口地址
	console.log("收到了支付回调", data);
	console.log("data.openid=", data.wxpay_info.openid);

	let add1 = await db.collection('a_h5pay').where({
		out_trade_no: data.out_trade_no
	}).update({
		openid: data.wxpay_info.openid,
		pay_state: 1,
		remark: "已支付",
		time_str: data._add_time_str,
	})

	//查找同一个a_oId之前是否支付回传过
	let check_number = await db.collection('a_h5pay').where({
		tuia: data.tuia,
		pay_state: 1
	}).count()

	//刚刚支付的数据算一条记录，所以必须大于1条才不回传。
	if (check_number.total > 1) {
		// 记录入库
		let addhc1 = await db.collection('jl_huichuanjilu').add({
			openid: data.wxpay_info.openid,
			type: "tuia",
			platform: "tuia",
			result: "a_oId重复，不予回传",
			time: data._add_time || 0,
			time_str: data._add_time_str || 0
		})
		return;
	}

	//回传推啊
	const form = new FormData()
	form.append('a_oId', data.tuia);
	form.append('advertKey', '5D65A708960FC6DCB40B4D9538957B97');
	form.append('subType', 3);
	let apiUrl = "https://activity.tuia.cn/log/effect/v2";
	const huichuan_res = await uniCloud.httpclient.request(apiUrl, {
		method: 'POST',
		headers: form.getHeaders(), // 请求头
		content: form.getBuffer(), // 请求内容
		dataType: 'json'
	})
	console.log("requestRes=", huichuan_res)

	// 回传记录入库
	let addhc1 = await db.collection('jl_huichuanjilu').add({
		openid: data.wxpay_info.openid,
		type: "tuia",
		platform: "tuia",
		result: huichuan_res,
		time: data._add_time || 0,
		time_str: data._add_time_str || 0
	})
	// 此处写你自己的支付成功逻辑结束-----------------------------------------------------------
	// user_order_success =  true 代表你自己的逻辑处理成功 返回 false 代表你自己的处理逻辑失败。
	return user_order_success;
};
